//
//
//
//
//import org.example.Solution;
//
//import java.util.*;
//
//
//class Test{
//    public static void main(String[] args) {
//        Solution solution = new Solution();
//        System.out.println(solution.trap(new int[]{0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2,
//                1}));
//
//    }
//}
///*class Solution {
//    public int trap(int[] height) {
//        int res = 0;
//
//        for (int i = 1; i < height.length - 2; i++) {
//            int left = i - 1;
//            int right = i + 1;
//            int min=0;
//            if (height[i] < height[left] && height[i] < height[right]) {
//                if (left > 0) {
//                    while (height[left] < height[left - 1]) {
//                        left--;
//                    }
//                }
//
//                if (right < height.length - 1) {
//                    while (height[right + 1] > height[right] && right < height.length - 1) {
//                        right++;
//                    }
//                }
//                int temp = left;
//                while(temp<right-1){
//                    min+= height[temp+1];
//                    temp++;
//                }
//                res+=(Math.min(height[left],height[right])*(right-left))-min;
//
//            }
//
//        }
//        return res;
//
//    }
//}*/
///*class Solution {
//    public int trap(int[] height) {
//        if (height == null || height.length < 3) {
//            return 0; // 边界条件，少于3个柱子无法存水
//        }
//
//        int res = 0; // 存储总的雨水面积
//
//        // 从第一个柱子到倒数第二个柱子依次计算
//        for (int i = 1; i < height.length - 1; i++) {
//            int left = i;
//            int right = i;
//
//            // 向左找到第一个比当前柱子高的柱子，作为左边界
//            while (left > 0 && height[left - 1] >= height[left]) {
//                left--;
//            }
//
//            // 向右找到第一个比当前柱子高的柱子，作为右边界
//            while (right < height.length - 1 && height[right + 1] >= height[right]) {
//                right++;
//            }
//
//            // 如果左右边界都存在，计算当前区间的水面积
//            if (left < i && right > i) {
//                // 获取左右两边较低的柱子高度作为挡板
//                int minHeight = Math.min(height[left], height[right]);
//                int totalRectangle = minHeight * (right - left + 1); // 整个区间组成的长方形面积
//
//                // 减去边界内的柱子高度，计算雨水面积
//                int totalHeight = 0;
//                for (int j = left + 1; j < right; j++) {
//                    totalHeight += height[j];
//                }
//
//                // 更新总的雨水面积
//                res += totalRectangle - totalHeight;
//            }
//        }
//
//        return res;
//    }
//}*/
///*class Solution {
//    public void moveZeroes(int[] nums){
//    int left = 0; // 左指针，指向非零元素的下一个位置
//    for (int right = 0; right < nums.length; right++) {
//        if (nums[right] != 0) {
//            // 如果当前元素不为0，则将其与左指针所指的元素交换
//            nums[left] = nums[right];
//            left++; // 左指针向右移动
//        }
//    }
//    // 将所有左指针之后的位置填充为0
//    for (int i = left; i < nums.length; i++) {
//        nums[i] = 0;
//    }
//}}*/
///*class Solution {
//    public int maxArea(int[] height) {
//        int left = 0;
//        int right = height.length - 1;
//        int maxArea = 0;
//        int curArea = 0;
//
//        while (left < right) {
//            curArea = Math.min(height[left], height[right]) * (right - left);
//            maxArea = Math.max(maxArea, curArea);
//
//            // 移动指针的策略：选择较短的边向内移动，因为移动较长的边不会增加面积
//            if (height[left] < height[right]) {
//                left++;
//            } else {
//                right--;
//            }
//        }
//        return maxArea;
//    }
//}
//import java.util.*;
//
//public class Solution {
//    public List<List<Integer>> threeSum(int[] nums) {
//        List<List<Integer>> result = new ArrayList<>();
//        Arrays.sort(nums);
//
//        for (int i = 0; i < nums.length - 2; i++) {
//            // 跳过重复元素以避免重复结果
//            if (i > 0 && nums[i] == nums[i - 1]) {
//                continue;
//            }
//
//            int left = i + 1;
//            int right = nums.length - 1;
//
//            while (left < right) {
//                int sum = nums[i] + nums[left] + nums[right];
//
//                if (sum == 0) {
//                    result.add(Arrays.asList(nums[i], nums[left], nums[right]));
//
//                    // 跳过重复元素
//                    while (left < right && nums[left] == nums[left + 1]) {
//                        left++;
//                    }
//                    while (left < right && nums[right] == nums[right - 1]) {
//                        right--;
//                    }
//
//                    left++;
//                    right--;
//                } else if (sum < 0) {
//                    left++;
//                } else {
//                    right--;
//                }
//            }
//        }
//
//        return result;
//    }*/
//
///*class Solution {
//    public int longestConsecutive(int[] nums) {
//        if (nums == null || nums.length == 0) {
//            return 0;
//        }
//        Set<Integer> set = new HashSet();
//        Arrays.sort(nums);
//        int maxLength = 1;
//        int length = 1;
//        for (int i = 0; i < nums.length - 1; i++) {
//            if(nums[i]==nums[i+1]){
//                continue;
//            }
//            if ((nums[i] + 1) == nums[i + 1]) {
//                length++;
//                maxLength = Math.max(maxLength, length);
//            } else {
//                length = 1;
//            }
//        }
//        return maxLength;
//    }
//}*/
//
////class Solution {
////    public List<List<String>> groupAnagrams(String[] strs) {
////        Map<String,List<String>> map = new HashMap();
////        for(String str : strs){
////            char[] c = str.toCharArray();
////            Arrays.sort(c);
////            String string = Arrays.toString(c);
//////            int code=0;
//////            for(char num : c){
//////                code+=num;
//////            }
//////            if(map.containsKey(string)){
//////                map.get(string).add(str);
//////            }else{
//////                List list = new ArrayList(Arrays.asList(strs));
//////                map.put(string,list);
//////            }
////
////             map.computeIfAbsent(string, key -> new ArrayList<>(Arrays.asList(str))).add(str);
////        }
////        return new ArrayList(map.values());
////    }
////}
